import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

class Config:
    """应用配置类"""
    
    # 基础配置
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'dev-secret-key-change-in-production'
    DEBUG = os.environ.get('DEBUG', 'False').lower() == 'true'
    
    # 获取项目根目录
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    # 文件上传配置 - 使用绝对路径
    UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', os.path.join(BASE_DIR, 'data/uploads'))
    OUTPUT_FOLDER = os.environ.get('OUTPUT_FOLDER', os.path.join(BASE_DIR, 'data/outputs'))
    
    # 根据环境变量覆盖路径
    if os.environ.get('FLASK_CONFIG') == 'production':
        UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', '/app/data/uploads')
        OUTPUT_FOLDER = os.environ.get('OUTPUT_FOLDER', '/app/data/outputs')

    MAX_CONTENT_LENGTH = int(os.environ.get('MAX_CONTENT_LENGTH', 500 * 1024 * 1024))  # 500MB
    
    # 支持的文件格式
    ALLOWED_VIDEO_EXTENSIONS = {
        'mp4', 'avi', 'mov', 'mkv', 'wmv', 'flv', 'webm'
    }
    
    ALLOWED_AUDIO_EXTENSIONS = {
        'mp3', 'wav', 'aac', 'ogg'
    }
    
    ALLOWED_SUBTITLE_EXTENSIONS = {
        'srt', 'ass', 'ssa', 'vtt'
    }
    
    # 合并所有支持的文件格式
    ALLOWED_EXTENSIONS = ALLOWED_VIDEO_EXTENSIONS | ALLOWED_AUDIO_EXTENSIONS | ALLOWED_SUBTITLE_EXTENSIONS
    
    # FFmpeg 配置
    FFMPEG_PATH = os.environ.get('FFMPEG_PATH', 'ffmpeg')
    FFMPEG_TIMEOUT = int(os.environ.get('FFMPEG_TIMEOUT', 300))  # 5分钟超时
    
    # 服务器配置
    HOST = os.environ.get('HOST', '0.0.0.0')
    PORT = int(os.environ.get('PORT', 5000))
    
    # 日志配置
    LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO')
    # 日志文件路径 - 默认使用相对路径
    LOG_FILE = os.environ.get('LOG_FILE', 'logs/app.log')
    
    # 根据环境变量覆盖日志路径
    if os.environ.get('FLASK_CONFIG') == 'production':
        LOG_FILE = os.environ.get('LOG_FILE', '/app/logs/app.log')
    
    # 临时文件清理配置
    CLEANUP_INTERVAL = int(os.environ.get('CLEANUP_INTERVAL', 3600))  # 1小时
    FILE_RETENTION_HOURS = int(os.environ.get('FILE_RETENTION_HOURS', 24))  # 24小时
    
    @staticmethod
    def init_app(app):
        """初始化应用配置"""
        # 确保必要的目录存在
        os.makedirs(Config.UPLOAD_FOLDER, exist_ok=True)
        os.makedirs(Config.OUTPUT_FOLDER, exist_ok=True)
        os.makedirs(os.path.dirname(Config.LOG_FILE), exist_ok=True)

class DevelopmentConfig(Config):
    """开发环境配置"""
    DEBUG = True
    LOG_LEVEL = 'DEBUG'
    # 开发环境使用绝对路径
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', os.path.join(BASE_DIR, 'data/uploads'))
    OUTPUT_FOLDER = os.environ.get('OUTPUT_FOLDER', os.path.join(BASE_DIR, 'data/outputs'))
    LOG_FILE = os.environ.get('LOG_FILE', os.path.join(BASE_DIR, 'logs/app.log'))

class ProductionConfig(Config):
    """生产环境配置"""
    DEBUG = False
    #LOG_LEVEL = 'WARNING'
    LOG_LEVEL = 'INFO'

class TestingConfig(Config):
    """测试环境配置"""
    TESTING = True
    UPLOAD_FOLDER = 'data/test_uploads'
    OUTPUT_FOLDER = 'data/test_outputs'

# 配置字典
config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'testing': TestingConfig,
    'default': DevelopmentConfig
} 